#ifndef DATABASE
#define DATABASE

#include <map>
#include <string>
#include <vector>
#include <iostream>
#include "sqlite3.h"

// 检查 SQLite3 操作的返回值
#define CHECK_SQLITE(result, expected, message) \
    if (result != expected) { \
        std::cerr << message << ": " << sqlite3_errmsg(db) << std::endl; \
        sqlite3_close(db); \
        return -1; \
    }

class Database
{
private:
    sqlite3 *db;

public:
    int createDatabase();

    // 用户注册
    int registerUser(const std::string &account, const std::string &username, const std::string &avatarPath,
                     const std::string &phone, const std::string &birthday, const std::string &bio,
                     const std::string &gender, const std::string &region, const std::string &email,
                     const std::string &password);

    // 用户登录
    std::map<std::string, std::string> loginUser(const std::string &phone, const std::string &password);

    // 获取用户信息
    std::map<std::string, std::string> getUserInfo(int userId);

    // 更新用户信息
    bool updateUserInfo(int userId, const std::map<std::string, std::string> &updatedInfo);

    // 删除用户
    bool deleteUser(int userId);

    // 插入图像
    int insertImage(const std::string &imageName, int size, const std::string &path,
                    const std::string &thumbnailPath, int documentId, int userId);

    // 删除图像
    bool deleteImage(int imageId);

    // 查询图像
    std::map<std::string, std::string> getImage(int imageId);

    // 获取用户的所有图像列表
    std::vector<std::map<std::string, std::string>> getAllImagesByUser(int userId);

    // 更新图像信息
    bool updateImageInfo(int imageId, const std::map<std::string, std::string> &updatedInfo);
};

#endif